perm filename PREAMB.TXT[SYS,HE]18 blob sn#091135 filedate 1974-03-11 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00013 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00003 00002	REQUIRE  41 VERSION
C00007 00003	The Models - the 3-D TABLE MODEL [not currently used]
C00010 00004		2D MODEL   [set up by curve fitter]
C00012 00005		CAMERA MODEL
C00015 00006		CORNER FINDER(EYE) AND AUTO FOCUS MODEL
C00022 00007	Logical job names and flags
C00026 00008	JOB SPECIFIC MPs AND DATA - HE AND GENERAL
C00028 00009		EDGE
C00031 00010		VERIFIER, GUNLO  AND CAMERA
C00034 00011		COLOR , EYE, AND AUTOFOC
C00042 00012		HAND
C00057 00013		CURVE and  ACCOMODATION
C00060 ENDMK
C⊗;
REQUIRE  41 VERSION;

COMMENT The above version number must be updated anytime a variable
	or item is changed in this file.  It need not be changed if
	only message procedure declarations are altered.

	This is the global variable definition file for the hand/eye
	system.  After it has been changed, run PREMAK on SYS,HE to
	generate a new PREAMB.SAI file	;
COMMENT	The Models - the 3-D TABLE MODEL [not currently used];

COMMENT

   This consists of an itemvar array TABLE, whose  indices  are  x/4,y/4
   where  x  and  y are in inches, and are table coordinates. Initially,
   TABLE[i,j] is filled up with a shiny  global  item,  if  TAB_INIT  is
   TRUE. As things become known about this element, various associations
   on this item are made:

	the item for each index has an integer datum decoded as follows:
		0	grid square not scanned yet
		1	grid square completely scanned and is empty
		-1	grid square at least partially scanned and
			contains something, according to the associations.

	BLOB ⊗ TABLE[i,j] ≡ blobs known to be located in this area
		This is the first association created.  When the blob
		has been recognized completely,  this association is
		replaced by
	ON ⊗ TABLE[i,j] ≡  objects known to be located in this area
	HIDDEN ⊗ TABLE[i,j] ≡ objects hiding the area
		The squares containing this association for a given object
		are those which were covered by the BLOB association but
		not the ON association.
	HEIGHT ⊗ TABLE[i,j] ≡ and item whose real datum is the height, in
		inches of the highest point of an object which occupies
		this square.

;

Global SAFE Itemvar Array TABLE[0:11,0:19];
Global Item    ON,HEIGHT,BLOB,HIDDEN;
Global Boolean    TAB_INIT;
COMMENT		2D MODEL   [set up by curve fitter]

	The 2D model is basically concerned with those elusive entities,
	BLOBs.  Each blob is represented by a global item, with some
	information saved about it.

	The description of the entire structure can currently be found
		in the edge follower documentation file,
		EDGCUR.LST[SYS,HE].  Below is one association to start 
		you off.

	XFORM ⊗ blob ≡  an item whose datum is the current camera transform.
		See camera stuff below.

	BLOBS contains a set of BLOB items stored there by K. Pingle which
		are now ready to be processed.;

Global set     BLOBS;

Global Item XFORM, BACKGROUND, REGION, PERIMETER, ENDPT, LINE, DANGLE,
	EDGES, POINT;
COMMENT		CAMERA MODEL

This model has all good things about the  camera.  The CAMERA program
only operates  on cameras 1 and 2.  Other  camera numbers cause it to
exit immediately.   There  is an  itemvar array  called CURCAM  which
contains  an item  for  each camera  whose datum  is  an array  which
completely  describes  the view  from  the camera.  These  is another
itemvar array called PREDCM  whose datum is an array  which describes
the predicted view if the  camera was moved to the position stored in
the datum. All references  to TRANSFORMs are  references to items  of
this variety.  The arrays have the following format:
	
		1:3,1:3	is colineation matrix (TABLE → SCREEN)
		  4,1:3 is lens center coords
		  5,1:2	screen coords of Piercing Point
		6:8,1:3	inverse colineation matrix (SCREEN→TABLE)
		  9,1  	the angle of the pan head in radians
		  9,2	the angle of the tilt head in radians
		  9,3	the focus range in inches
		 10,1	the camera number (in case you copy this)
		 10,2	the lens number (if camera 1) else the
			current focal length of the zoom lens
		 10,3	the iris setting (someday) 	;

Global SAFE Real Array Itemvar Array CURCAM, PREDCM[1:2];
global SAFE integer array camerr, camjob[1:2];
global safe real array pots[1:5,1:2];
COMMENT		CORNER FINDER(EYE) AND AUTO FOCUS MODEL;
 
comment		*** corner finder ***;

GLOBAL INTEGER EYEFLG;

GLOBAL REAL ARRAY DIR_EYE[0:10,1:8];
comment	 DIR[.,I], I=1,...,4 -  direction cosines of corner sides
	 DIR[.,5],DIR[.,6]-screen coords of corner
	 DIR[.,7]=0 if corner, 1 if line
	 DIR[.,8]=0 if match, 1 if only 1st. edge match, 2 if 2nd. match
	 different rows are for different features found in the same window;

GLOBAL INTEGER ARRAY LOOK_AT[1:8];
comment	LOOK_AT[1]-camrea number: 1-old camera, 2-new camera(don`t use yet)
	LOOK_AT[2],LOOK_AT[3]-screen coordinates of center of window
	LOOK_AT[4]-width of window
	LOOK_AT[5]-hight of window
  	LOOK_AT[6],LOOK_AT[7]-TCLIP,BCLIP
	LOOK_AT[8]-sensitivity;

comment		*** AUTO FOCUS MODEL ***;

GLOBAL INTEGER FOCFLG;
comment for error indication;

GLOBAL REAL FOCRANG,FOCDELF;
comment FOCRANG is the range estimate to best focus.
	FOCDELF is the estimate of range uncertainty;
COMMENT	Logical job names and flags

These logical names are those for the global flags only.  They should
not be confused with the logical names used by the message procedure
routines or by and hand/eye monitor, although it would be nice if they
were all the same.

Table of logical names:

EDGE		EDGE FOLLOWER
CUR		CURVE FITTER
CAM		THE CAMERA MOVER AND TRANSFORM MAKER
VER		LINE VERIFIER
COL		COLOR RECOGNIZER
HAND		AN ARM PROGRAM
MOVE		ANOTHER ARM PROGRAM - two arms are better than one
GUN		GUNNAR'S REGION FINDER
DRV		CONTRL PROGRAM
EYE		Gill's corner search and match, you are welcome to try it.
FOC		Automaic-Focus. Ask J.M.T  about thery, Gill about practice.

Template data:

DEB_@		If TRUE, you may put debugging information on the disk.
DIS_@		If TRUE, you may disply to your heart's content.
YES_@		You should set to TRUE as you initialize.
TYP_@		You may type out anything you please -- don't go into wait

BELOW ARE THE CURRENTLY USED GLOBAL FLAGS;

Global Integer DEB_EDGE,DIS_EDGE,YES_EDGE,TYP_EDGE;
GLOBAL INTEGER DEB_CUR,DIS_CUR,YES_CUR,TYP_CUR;
Global Integer DEB_CAM,DIS_CAM,YES_CAM,TYP_CAM;
Global Integer DEB_VER,DIS_VER,YES_VER,TYP_VER;
Global Integer DEB_COL,DIS_COL,YES_COL,TYP_COL;
Global Integer DEB_DRV,DIS_DRV,YES_DRV,TYP_DRV;
GLOBAL INTEGER DEB_GUN,DIS_GUN,YES_GUN,TYP_GUN;
GLOBAL INTEGER DEB_EYE,DIS_EYE,YES_EYE,TYP_EYE;
GLOBAL INTEGER DEB_HAND,DIS_HAND,YES_HAND,TYP_HAND;
GLOBAL INTEGER DEB_MOVE,DIS_MOVE,YES_MOVE,TYP_MOVE;
Global Integer DEB_FOC,DIS_FOC,YES_FOC,TYP_FOC;
COMMENT	JOB SPECIFIC MPs AND DATA - HE AND GENERAL;

Define mp="Forward Message Procedure";
Define smp="Forward Simple Message Procedure";

global internal integer RUN;
comment		the run number if HE is controling this mess, 0 otherwise;

EXTERNAL BOOLEAN TRACING;
comment		the message procedure trace flag, which is defined in the 
		second segment runtime routines;

GLOBAL ITEM NIL, EVERY;
comment		misc. items for communicating between jobs;

GLOBAL SAFE INTEGER ARRAY GDISP[0:14];
Comment		table of free display frames for h/e version of Quam
		display code;

GLOBAL INTEGER GDISP_INIT;
Comment		this is the initialization flag for GDISP;

smp MON_COM(string command);
comment		this is the monitors only public message procedure,
		TRACE can only be called from the second segment;

GLOBAL INTEGER DISDEV;
Comment		=-1 if monitor on data disk, 1 if on III, 0 if no monitor;

Global SAFE Real Array Itemvar ITVAR_II;
Comment		for various MPs to get object;

GLOBAL INTEGER STAT_II;
Comment		for various MPs to get status;
COMMENT		EDGE

For a detailed description of these procedures, see EDGCUR.LST[SYS,HE].
Only the definitions themselves are given here.;

COMMENT		MISC. PROCEDURES;

mp GETDATA ( LIST arg; reference boolean flag);
smp DISK ( string name; reference boolean flag);
smp XEQ ( string command; reference boolean flag);
smp SETVAL ( string name; integer val; reference boolean flag);
MP GLBDMP(SET A);
MP GETSTAT(LIST ARG; REAL TOP,BOT,LEFT,RIGH; REFERENCE BOOLEAN FLAG);

comment		main calls;

mp FIND ( ITEMVAR arg );
mp RELOOK ( ITEMVAR arg; INTEGER x, y ); 
mp FIT ( ITEMVAR arg );
mp COMPACT ( ITEMVAR arg );
mp REJECT ( ITEMVAR arg );
MP FINE(ITEMVAR ARG);

Comment these last six return a message (to be found in you the caller):;

mp RESPONSE ( string name; integer arg; integer status );

MP SEND_DATA ( INTEGER COUNT; REAL ARRAY DAT);
Comment		 this sends edge points to requesting job (found in caller);

MP SEND_STATUS(INTEGER OC;REAL ARRAY S);
Comment		this send object data and segment status to requesting job;

MP CURVE_FIT(REAL ARRAY DATA);
comment		the next message links to the curve fitter;

GLOBAL SET OLDBLOB;
Comment		This is the edge followers very own set (no pun intended).;

GLOBAL ITEM SEGM;
comment		item for GETSTATUS command's internal structure;
COMMENT		VERIFIER, GUNLO  AND CAMERA;

comment		*** VERIFIER ***	;

mp VERIFY(INTEGER X1, Y1, X2, Y2, TV, COLOR; BOOLEAN FLAG);
MP VER_RESULT(SAFE INTEGER ARRAY RESULT);

GLOBAL REAL CONFID;	COMMENT THIS IS TO RETURN CONF;

Comment 	*** CAMERA ***		;

SIMPLE mp CAM_UPDATE(INTEGER CAMNUM);
   comment update the model;

SIMPLE mp CAM_INIT(INTEGER CAMNUM);
   comment read in an initialized model...;

SIMPLE mp CHNG_LENS(INTEGER LENS);
   comment 1-25mm, 2-50mm, 3-75mm, 4-100mm. CAMERA 1 ONLY;

SIMPLE mp MOVE_CAM(INTEGER CAMNUM; REAL PAN,TILT);
   comment PAN from -X into table, TILT from horizon down, in RADs;

SIMPLE mp CHNG_FOCUS(INTEGER CAMNUM; REAL RANGE);
   comment RANGE in inchs;

SIMPLE mp CHNG_ZOOM(REAL FOC_LGTH);
    comment FOC_LGTH in mm;

SIMPLE mp CAM_CENTER(INTEGER LENS,CAMNUM; REAL X,Y,Z,ZOOM);
   comment X,Y,Z, in table coordinates;

SIMPLE mp CAM_PRED(INTEGER LENS,CAMNUM; REAL X,Y,Z,ZOOM);
   comment X,Y,Z, in table coordinates;

SIMPLE MP CHNG_IRIS(INTEGER CAMNUM; REAL IRIS);
   comment iris pot reading desired;


Comment		*** GUNLO ***;

GLOBAL ITEM GUN_EVENT;
    comment this is an event item.  No other job dare use it;

SMP G_EDGES(SAFE REAL ARRAY POINTS; INTEGER CAMERA, CNT; REAL SIDLEN);

SMP GUN_COM(STRING COMMAND);

GLOBAL SAFE REAL ARRAY ITEMVAR G_PNTS;
    comment this is to hold an array of edge points from G_EDGES;
COMMENT		COLOR , EYE, AND AUTOFOC;

COMMENT		*** COLOR ***;

comment		this is for the old color program of TOB;

mp CLR_GET ( INTEGER N; REAL ARRAY POINTS);
	Comment call to get colors for points. POINTS is indexed
		by [1:2,1:N] for x,y screen coords of places to look;

mp CLR_RESPONSE ( INTEGER ITEMVAR ARRAY GJ);
	Comment this is the response for colors;

comment		this is for the new colour program of AJT;

MP COLOUR_INIT(INTEGER ARRAY TV; INTEGER STEP,CAM,MULT,BC);
MP C_INIT(INTEGER TV, POINTS);
MP COLOUR(INTEGER COL; INTEGER ARRAY POINTS);
MP COLOUR_RECEIVE(INTEGER COL; INTEGER ARRAY COLOUR_MAP);



comment		*** EYE ***;

SIMPLE mp SRCH_IMAGE(INTEGER BKGR,INT,SEARCH; REAL TOLER; REAL ARRAY DIRD);
comment Jack_of_all_trades, see explanation below
	BKGR- -1 for dark background, 1 for light background, 0 for either
	INT-intensity match 1-for darker inside, -1-for lighter inside, 
		            0-for no match
        SEARCH-width of window to search (in LOOK_AT[4] units,
	       0 for no search but recentering allowed,
	       if SEARCH<0 -SEARCH is the number of features looked for
	TOLER-tolerance for matching .05 is a good number, -1 for no match;

SIMPLE mp SET_WINDOW;
comment for testing and helping purposes;

comment		*** AUTOFOC ***;

mp AUTOFOC(REAL EST_RANG,RANGINVAL; INTEGER NCUT);
comment EST_RANG: initial estimataed range in inches.
        RANGINVAL: initial range uncertainty in inches.
        NCUT: value of CUT (0 to 15. usually 4) or -1 for automatic;
comment		HAND
;
DEFINE TSX="1.0017",TSY="1.0028";
comment	where real x = table x * tsx  and real y = table y * tsy
	these are the conversion factors from table inches to real inches;
GLOBAL INTERNAL INTEGER ARM_MOTION,ARM_STATUS,ARM_SEGMENT,ARM_WAIT,
	ARM_TIME,ARM_EXECUTE;
comment	ARM_MOTION contains the file name (in sixbit) of the trajectory
	being executed with the arm in motion, it is set to zero on the
	completionof execution.
	If an execution error occurs ARM_MOTION is cleared and the
	file nameis set into ARM_WAIT.
	ARM_STATUS at the completion of execution of each trajectory
	is set as follows:
		0	all O.K.
		1	overflow occured
		<n>1	execution ended due to excessive force at joint n
		2	grasp error, hand closed less than the min. distance
		3	file not found
		4	enter for data file failed
		5	disk not found
		<n>6	Arm stopped on touching the n'th sensor
		7	A/D read error
		20	excessive time
		22	hand takes excessive time
		23	Arm failed to stop on force limit
		24	Arm in control loop
		25	Save array index out of bounds
		30	the arm is down
		40	message invalid, arm not in wait state
		50	file read error
		60	wrong servo version number
		70	reference supply is off, check fuse and restart job
		100	the PDP-6 is down
		200	PDP-6 Parity error occured

	ARM_SEGMENT initially zero at the beginning of execution of each
	trajectory file is incremented as each part trajectory is started

	ARM_TIME is set to zero by START_TRAJECTORY and is incremented
	by the estimated time in jiffies that the trajectory will take,
	each time MOVE_ARM is called

	ARM_EXECUTE if true the arm function is executed immediately,
	in the case of trajectory functions the hand is moved but in the
	manner of a change;


GLOBAL INTERNAL BOOLEAN STOP_ON_TOUCH;
comment	if this is true the arm will stop if it touches anything that it
	can feel during any trajectories executed after it is set;

FORWARD MESSAGE SIMPLE PROCEDURE SET_TOUCH(BOOLEAN STOP_ON_TOUCH);
comment	this is a planning function and allows the touch state to be
	changed during execution for the next function;

GLOBAL INTERNAL INTEGER ARRAY FELT[1:2,1:4,1:4];
comment	if the arm stops on touching something this contains the
	information as to which element did the touching;

GLOBAL REAL ARRAY ARM_LINK[3:6,1:4,1:4];
comment	These 4, 4x4 arrays contain the current positions of the last four
	links of the arm. They are updated after every arm motion, and
	when the arm is in the wait state;

GLOBAL REAL GRASP;
comment	This contains the opening between the fingers in inches;

SMP ARM_CONO(REAL ARRAY APPROACH,OBJECT;INTEGER DEPROACH_TIME,
	MID_TIME);
comment	this is a planning function allowing arrive, depart vectors to be
	set when this message is executed, also object is a 1x4 array
	containing the mass and three radii of gyration of the object to
	be moved;

SMP TALK_ARM;

SMP SET_TRANS(STRING S;REAL ARRAY T);
SMP SET_VECT(STRING S;REAL ARRAY V);
SMP GET_TRANS(STRING S;REAL ARRAY T);
SMP GET_VECT(STRING S;REAL ARRAY V);

SMP START_TRAJECTORY(STRING FILE;BOOLEAN START_FROM_LAST);
comment	This procedure is called to start every trajectory, If
	START_FROM_LAST is TRUE then the trajectory  will start from the
	last planned position, otherwise it will start from the present
	arm position, needless to say if the arm isn't physically where
	the trajectory starts from there will trouble;

SMP MOVE_ARM(REAL ARRAY JOINT6; REFERENCE INTEGER FLAG);
comment	This and the next two procedures generate trajectories from the
	last place a trajectory was planned to, to the new position.
	Given a transform for the JOINT6( with the orign located between
	the finger tips and 0.375 inches in, the z axis aligned with the
	fingers and pointing out and the unit y vector pointing from one
	finger tip to the other), this procedure finds an arm solution and
	checks that it does not put the arm through the table or through
	its support post, and generates a trajectory returning TRUE in FLAG;

MP MOVE_INSTANCE(REAL ARRAY ITEMVAR INSTANCE;REAL ARRAY NEW_TRANSFORM,
	INTERMEDIATE_POSITION;REFERENCE INTEGER PLAN);
comment	This procedure generates a trajectory to move the arm from the
	last planned position, to pick up the INSTANCE of some prototype
	and to move it to NEW_POSITION using INTERMEDIATE_POSITION if
	necessary, status is returned in PLAN as follows:
		-1	There is no way the hand can grasp the instance
		-2	Hand cannot reach instance at its initial position
		-3	Hand cannot reach instance at its final position
		-4	There is no way using the present intermediate
			position that the move can be made, another
			INTERMEDIATE_POSITION might help.
		-5	Instance has either too few or too many prototypes
		2	Trajectory generated without intermediate position
		4	Trajectory generated with the intermediate position
	Note if the INTERMEDIATE_POSITION is cleared to zero then the
	instances present position will be used as such
	this message proceedure is now in module "MOVE" which in turn sends
	messages to "HAND",no messages should be sent to HAND until MOVE
	has finished;

SMP PARK_ARM;
comment	Generates a trajectory to the park position;

FORWARD MESSAGE SIMPLE PROCEDURE OPEN_HAND(REAL OPENING);
comment	This causes the hand to open or close to OPENING at this point in
	the trajectory if opening it does not stop on touch;

FORWARD MESSAGE SIMPLE PROCEDURE CLOSE_HAND(REAL MINIMUN_DISTANCE);
comment	This causes the hand to close at this point in the trajectory,
	and if so doing it closes more than MINIMUN_DISANCE execution is
	stopped and ARM_STATUS is set to 2
	it does not stop on touch;

FORWARD MESSAGE SIMPLE PROCEDURE PLACE_ARM;
comment	This causes the hand to decend vertically until it meets some
	resistance. It should be able to drop approximately 1/2 inch
	before stopping;

SMP CHANGE_ARM(REAL ARRAY DX_DY_DZ;REAL DIST;REAL ARRAY AXIS;REAL DEG;
	INTEGER TIME;REFERENCE INTEGER FLAG);
comment	At this point in the trajectory the arm will make the appropiate 
	differential motion specified by the first three elements of
	DX_DY_DZ scaled by DIST, it will also rotate DEG degrees about
	axis AXIS. The action will take at least TIME jiffies.
	If the motion drives the arm beyond its physical limits no action
	is planed and FALSE is returned;

FORWARD MESSAGE SIMPLE PROCEDURE WAIT_ARM(STRING ERROR_MESSAGE);
comment	This procedure causes the arm to pause in execution and go into
	a wait state;

FORWARD MESSAGE SIMPLE PROCEDURE CLOSE_TRAJECTORY;
comment	This closes the trajectory file, a good idea;

FORWARD MESSAGE SIMPLE PROCEDURE DO_IT(INTEGER PPPN;STRING FILE);
comment	This executes trajectory FILE;

FORWARD MESSAGE SIMPLE PROCEDURE DO_PROCEED(BOOLEAN REPEAT);
comment	Execution of this procedure when in the wait state causes the arm
	to proceed with its planned trajectory repeating the last
	instruction if necessary;

FORWARD SIMPLE MESSAGE PROCEDURE ARM_POSITION(STRING SAVE_CELL);
Comment	This causes the arm position to be read and should not be used
	unless the arm has been moved without power on
	The contents of save cell SAVE_CELL are returned in TRANS_ARM;

SMP STOP_ARM(REAL ARRAY F,V);
Comment	This will cause the arm to stop when it exerts a force or moment
	in the direction specified, if it fails to stop then error 23
	results;

FORWARD SIMPLE MESSAGE PROCEDURE ARM_SKIPE(INTEGER ERROR);
Comment	This causes the arm to skip the next function it was going to
	perform if error ERROR occured;

FORWARD SIMPLE MESSAGE PROCEDURE ARM_SKIPN(INTEGER ERROR);
Comment	This causes the arm to skip the next function it was going to
	perform if error ERROR did not occur;

FORWARD SIMPLE MESSAGE PROCEDURE ARM_SKIPs(INTEGER ERROR);
Comment	This causes the arm to skip the next function it was going to
	perform if error ERROR ored with the variable bits occured;

FORWARD SIMPLE MESSAGE PROCEDURE ARM_JMP(INTEGER N);
Comment	This causes the arm to jump backwards or forwards N functions;

FORWARD SIMPLE MESSAGE PROCEDURE MERGE_ARM;
comment	this will cause a preceeding arm function to be performed with the
	move instruction immediately preceeding that function;

FORWARD SIMPLE MESSAGE PROCEDURE CENTER_HAND(REAL MINIMUM_DISTANCE);
comment	this is the same as CLOSE_HAND except that it centers the hand 
	before closing;

SMP DRIVE_ARM(INTEGER JOINT;REAL DEGREES;INTEGER TIME;
	REFERENCE INTEGER FLAG);
comment	causes a singlejoint to be driven;

FORWARD SIMPLE MESSAGE PROCEDURE ARM_SAVE(STRING S);
comment	causes the differential deviation to be saved in the i'th cell;

FORWARD SIMPLE MESSAGE PROCEDURE SET_ARM(STRING S;REAL ARRAY P,O);

FORWARD SIMPLE MESSAGE PROCEDURE ARM_RESTORE(STRING S;INTEGER I);
comment	causes the differential deviation to be restored from the i'th cell
	it is executed after a move instruction, and affects that move;

FORWARD SIMPLE MESSAGE PROCEDURE ARM_ASSIGN(STRING S;INTEGER I);

comment			THE ARM'S GLOBALS;
GLOBAL INTERNAL SAFE REAL ARRAY ARM_VECTOR[1:7];
GLOBAL INTERNAL INTEGER ARRAY WAIT_STRING[1:15];
GLOBAL SAFE REAL ARRAY ITEM TEST_BLOCK[1:4,1:4];
GLOBAL INTEGER ARM_PLAN;
GLOBAL SAFE REAL ARRAY FREE_ARM[0:6,1:6];
GLOBAL SAFE REAL ARRAY FORCE_ARM[1:6];
GLOBAL INTERNAL REAL ARRAY TRANS_ARM[1:4,1:4];
GLOBAL REAL ARRAY VECT_ARM[1:4];
Comment		CURVE and  ACCOMODATION;

GLOBAL INTEGER CURVE_STATUS; COMMENT to return status from CURVE;

comment 	global tolerences for curve fitting;

GLOBAL INTERNAL REAL cur_t1,cur_t2,cur_ml,cur_cl,cur_mx,cur_ld,cur_vd;
GLOBAL INTEGER cur_init;

COMMENT THIS IS IRWIN'S THING ;
GLOBAL INTEGER FLAG_CAM ;


COMMENT  FLAGS AND CALIB. CONSTANTS FOR ACCOMODATION ROUTINES
	 IN EDGE FOLLOWER, COLOR, FOCUS, VERIFIER;

GLOBAL INTEGER COLFILT_ACC;		COMMENT	FILTER COLOR: 0-RED,
					1-BLUE, 2-GREEN, 3-CLEAR;
GLOBAL INTERNAL INTEGER DAC_ACC;	COMMENT CURRENT DAC SETTING;
GLOBAL INTERNAL BOOLEAN CHANGE_ACC;	COMMENT TRUE IF SCENE CHANGED;
GLOBAL INTERNAL	BOOLEAN SENSCAL_ACC;	COMMENT HAS SENS BEEN CALIBRATED;
GLOBAL INTERNAL	BOOLEAN AUTOCAL_ACC;	COMMENT TABLE_ACC INITIALIZED;
GLOBAL INTERNAL INTEGER AUTO_ACC;	COMMENT SETTING OF DAC AT AUTOTARGET
					THRES. FOR CURRENT FILTER;
GLOBAL INTEGER SENSIGN_ACC;		COMMENT DIRECTION OF LAST CHANGE IN
					TARGET VOLTAGE-TO AVOID LOOPS.
					1: UP, -1: DOWN, 0-NOT YET CHANGED;
GLOBAL SAFE INTERNAL INTEGER ARRAY TABLE_ACC[0:63];
					COMMENT HOLDS AD READINGS
					FOR DAC SETTINGS;
GLOBAL SAFE INTEGER ARRAY FIL_ACC[0:3];	COMMENT AUTO TARGET FOR EACH FILTER,
					0 IF NOT INITED;

GLOBAL REAL FCALPOTC_ACC,FCALPOTD_ACC,F_ACC,FNUM_ACC,CIRCONFUS_ACC;
	COMMENT FOCUS AND LENS CALIBRATION CONSTANTS;

GLOBAL BOOLEAN SENSFLAG_ACC;		COMMENT TRUE-SENSITIVITY CAN SAFELY
						BE RAISED
						FALSE-CANT RAISE
						SENSITIVITY;
GLOBAL BOOLEAN SENDWNFG_ACC;		COMMENT SENSITIVITY CANNOT BE
						LOWERED;